package com.jt.www.model.issue;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.jt.www.model.vo.sdCheck.HolderForProVO;
import com.jt.www.model.vo.sdCheck.InsuredForProVO;
import com.jt.www.model.vo.sdCheck.PolicyAgentForProVO;
import com.jt.www.model.vo.sdCheck.RiskForProVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Author: cjw
 * @Description: 订单详情查询对象（财）
 * @Date: 9:42 2018/11/1
 */

@ApiModel
@JsonIgnoreProperties(ignoreUnknown = true)
public class ApplicationQueryForProVO {

    /**
     * 订单号
     */
    @ApiModelProperty(value = "订单号")
    private String orderCode;

    /**
     * 订单状态
     */
    @ApiModelProperty(value = "订单状态(待支付（01）/部分支付（02）/支付完成（03）/已完成（04）/已过期（05）/待核保（06）/核保失败（07）/支付失败（08）/已取消（09）/已删除（10）)")
    private String orderStatus;

    /**
     * 投保单编号
     */
    @ApiModelProperty(value = "投保单编号")
    private String applicationFormCode;

    /**
     * 项目编码
     */
    @ApiModelProperty(value = "项目编码")
    private String projectCode;

    /**
     * 项目名称
     */
    @ApiModelProperty(value = "项目名称")
    private String projectName;

    /**
     * 产品编码
     */
    @ApiModelProperty(value = "用户编码")
    private String productCode;

    /**
     * 产品名称
     */
    @ApiModelProperty(value = "产品名称")
    private String productName;

    /**
     * 出单方式：
     * 线上出单（01）、
     * 线下出单（00）
     * <p>
     * 根据产品配置来确定。
     */
    @ApiModelProperty(value = "出单方式（线上出单（01）/线下出单（00））")
    private String issueType;

    /**
     * 渠道代码
     */
    @ApiModelProperty(value = "渠道编码")
    private String channelCode;

    /**
     * 渠道名称
     */
    @ApiModelProperty(value = "渠道名称")
    private String channelName;

    /**
     * 出单机构编码
     * 江泰分公司层级
     */
    @ApiModelProperty(value = "江泰分公司编码")
    private String branchCode;

    /**
     * 机构名称
     */
    @ApiModelProperty(value = "江泰分公司名称")
    private String branchName;

    /**
     * 区分是新保还是续保标识，y-续保；n-新保
     */
    @ApiModelProperty(value = "是否续保（Y是/N否）")
    private String renewal;

    /**
     * 续保次数
     */
    @ApiModelProperty(value = "续保次数")
    private Integer renewTimes;

    /**
     * 续保保单号
     */
    @ApiModelProperty(value = "续保保单号")
    private String renewLastPolicyNo;

    /**
     * 投保开始日期
     */
    @ApiModelProperty(value = "投保开始日期")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date applicantStartDate;

    /**
     * 投保终止日期
     */
    @ApiModelProperty(value = "投保终止日期")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date applicantEndDate;

    /**
     * 起保日期
     */
    @ApiModelProperty(value = "起保日期")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startDate;

    /**
     * 保险止期
     */
    @ApiModelProperty(value = "保险止期")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endDate;

    /**
     * 投保单状态
     * 待初审（00）
     * 初审不通过（01）
     * 待复审（02）
     * 复审不通过（03）
     * 延期凭证待上传（04）
     * 延期凭证待审核（05）
     * 延期拼装审核不通过（06）
     * 待关联（07）
     * 待出单（08）
     * 已出单（10）
     */
    @ApiModelProperty(value = "投保单状态（待初审（00）/初审不通过（01）/待复审（02）/复审不通过（03）/延期凭证待上传（04）/延期凭证待审核（05）/延期拼装审核不通过（06）/待关联（07）/待出单（08）/已出单（10）/已取消(11)/已删除(12)/投保单盖章审核不通过(13)）")
    private String applicationStatus;

    /**
     * 财务状态
     * 已到账（01）
     * 未到账（00）
     * 部分到账（02）
     */
    @ApiModelProperty(value = "财务状态（00未到账/01已到账/02部分到账）")
    private String financeStatus;

    /**
     * 出单标记
     * 末出单（n）
     * 已出单（y）
     */
    @ApiModelProperty(value = "出单状态（Y已出单/N未出单）")
    private String issueStatus;

    /**
     * 报文推送状态
     */
    @ApiModelProperty(value = "报文推送状态（00待推送/01成功/02失败/03异常）")
    private String pushStatus;

    /**
     * 保单类型
     * 电子保单（00）/纸质保单（01）
     */
    @ApiModelProperty(value = "保单类型（电子保单（00）/纸质保单（01））")
    private String policyKind;

    /**
     * 投保单保费金额
     */
    @ApiModelProperty(value = "投保单应付保费")
    private BigDecimal prem;

    /**
     * 投保单优惠金额
     */
    @ApiModelProperty(value = "投保单优惠金额")
    private BigDecimal reducePrem;

    /**
     * 优惠前保费
     */
    @ApiModelProperty(value = "投保单优惠前保费")
    private BigDecimal beforePrem;

    /**
     * 优惠后保费
     */
    @ApiModelProperty(value = "投保单优惠后保费")
    private BigDecimal afterPrem;

    /**
     * 实付保费
     */
    @ApiModelProperty(value = "投保单实付保费")
    private BigDecimal actualPrem;

    /**
     * 省名称
     */
    @ApiModelProperty(value = "省名称")
    private String provinceName;

    /**
     * 城市名称
     */
    @ApiModelProperty(value = "城市名称")
    private String cityName;

    /**
     * 区县名称
     */
    @ApiModelProperty(value = "区县名称")
    private String countyName;

    /**
     * 支付方式 在线支付（00）、线下转账支付（01）、支付凭证（02）
     */
    @ApiModelProperty(value = "支付方式（在线支付（00）、线下转账支付（01）、支付凭证（02））")
    private String payType;

    /**
     * 投保单类型 自助投保（00）/代投保（01）
     */
    @ApiModelProperty(value = "投保单类型（自助投保（00）/代投保（01））")
    private String applicationType;

    /**
     * 赔付率
     */
    @ApiModelProperty(value = "赔付率")
    private String compensationRate;

    /**
     * 保单号
     */
    @ApiModelProperty(value = "保单号")
    private String policyNo;

    /**
     * 保单状态
     */
    @ApiModelProperty(value = "保单状态（00生效/01终止/02失效）")
    private String policyStatus;

    /**
     * 保单服务人员信息
     */
    @ApiModelProperty(value = "保单服务人员信息")
    private List<PolicyAgentForProVO> agents = new ArrayList<>();

    /**
     * 投保人信息
     */
    @ApiModelProperty(value = "投保人信息")
    private HolderForProVO holder = new HolderForProVO();

    /**
     * 保险公司信息
     */
    @ApiModelProperty(value = "保险公司信息")
    private List<InsuranceCompanyVO> insuranceCompanyVOS;

    /**
     * 被保人信息
     */
    @ApiModelProperty(value = "被保人信息")
    private List<InsuredForProVO> insuredList = new ArrayList<>();

    /**
     * 险种信息
     */
    @ApiModelProperty(value = "险种信息")
    private List<RiskForProVO> riskList = new ArrayList<>();

    /**
     * 保费计算公式
     */
    @ApiModelProperty(value = "保费计算公式")
    private String formulas;

    @Override
    public String toString() {
        return "ApplicationQueryForProVO{" +
                "orderCode='" + orderCode + '\'' +
                ", orderStatus='" + orderStatus + '\'' +
                ", applicationFormCode='" + applicationFormCode + '\'' +
                ", projectCode='" + projectCode + '\'' +
                ", projectName='" + projectName + '\'' +
                ", productCode='" + productCode + '\'' +
                ", productName='" + productName + '\'' +
                ", issueType='" + issueType + '\'' +
                ", channelCode='" + channelCode + '\'' +
                ", channelName='" + channelName + '\'' +
                ", branchCode='" + branchCode + '\'' +
                ", branchName='" + branchName + '\'' +
                ", renewal='" + renewal + '\'' +
                ", renewTimes=" + renewTimes +
                ", renewLastPolicyNo='" + renewLastPolicyNo + '\'' +
                ", applicantStartDate=" + applicantStartDate +
                ", applicantEndDate=" + applicantEndDate +
                ", startDate=" + startDate +
                ", endDate=" + endDate +
                ", applicationStatus='" + applicationStatus + '\'' +
                ", financeStatus='" + financeStatus + '\'' +
                ", issueStatus='" + issueStatus + '\'' +
                ", pushStatus='" + pushStatus + '\'' +
                ", policyKind='" + policyKind + '\'' +
                ", prem=" + prem +
                ", reducePrem=" + reducePrem +
                ", beforePrem=" + beforePrem +
                ", afterPrem=" + afterPrem +
                ", actualPrem=" + actualPrem +
                ", provinceName='" + provinceName + '\'' +
                ", cityName='" + cityName + '\'' +
                ", countyName='" + countyName + '\'' +
                ", payType='" + payType + '\'' +
                ", applicationType='" + applicationType + '\'' +
                ", compensationRate='" + compensationRate + '\'' +
                ", policyNo='" + policyNo + '\'' +
                ", policyStatus='" + policyStatus + '\'' +
                ", agents=" + agents +
                ", holder=" + holder +
                ", insuredList=" + insuredList +
                ", riskList=" + riskList +
                ", formulas='" + formulas + '\'' +
                '}';
    }

    public String getOrderCode() {
        return orderCode;
    }

    public void setOrderCode(String orderCode) {
        this.orderCode = orderCode;
    }

    public String getOrderStatus() {
        return orderStatus;
    }

    public void setOrderStatus(String orderStatus) {
        this.orderStatus = orderStatus;
    }

    public String getApplicationFormCode() {
        return applicationFormCode;
    }

    public void setApplicationFormCode(String applicationFormCode) {
        this.applicationFormCode = applicationFormCode;
    }

    public String getProjectCode() {
        return projectCode;
    }

    public void setProjectCode(String projectCode) {
        this.projectCode = projectCode;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getIssueType() {
        return issueType;
    }

    public void setIssueType(String issueType) {
        this.issueType = issueType;
    }

    public String getChannelCode() {
        return channelCode;
    }

    public void setChannelCode(String channelCode) {
        this.channelCode = channelCode;
    }

    public String getChannelName() {
        return channelName;
    }

    public void setChannelName(String channelName) {
        this.channelName = channelName;
    }

    public String getBranchCode() {
        return branchCode;
    }

    public void setBranchCode(String branchCode) {
        this.branchCode = branchCode;
    }

    public String getBranchName() {
        return branchName;
    }

    public void setBranchName(String branchName) {
        this.branchName = branchName;
    }

    public String getRenewal() {
        return renewal;
    }

    public void setRenewal(String renewal) {
        this.renewal = renewal;
    }

    public Integer getRenewTimes() {
        return renewTimes;
    }

    public void setRenewTimes(Integer renewTimes) {
        this.renewTimes = renewTimes;
    }

    public String getRenewLastPolicyNo() {
        return renewLastPolicyNo;
    }

    public void setRenewLastPolicyNo(String renewLastPolicyNo) {
        this.renewLastPolicyNo = renewLastPolicyNo;
    }

    public Date getApplicantStartDate() {
        return applicantStartDate;
    }

    public void setApplicantStartDate(Date applicantStartDate) {
        this.applicantStartDate = applicantStartDate;
    }

    public Date getApplicantEndDate() {
        return applicantEndDate;
    }

    public void setApplicantEndDate(Date applicantEndDate) {
        this.applicantEndDate = applicantEndDate;
    }

    public Date getStartDate() {
        return startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    public String getApplicationStatus() {
        return applicationStatus;
    }

    public void setApplicationStatus(String applicationStatus) {
        this.applicationStatus = applicationStatus;
    }

    public String getFinanceStatus() {
        return financeStatus;
    }

    public void setFinanceStatus(String financeStatus) {
        this.financeStatus = financeStatus;
    }

    public String getIssueStatus() {
        return issueStatus;
    }

    public void setIssueStatus(String issueStatus) {
        this.issueStatus = issueStatus;
    }

    public String getPushStatus() {
        return pushStatus;
    }

    public void setPushStatus(String pushStatus) {
        this.pushStatus = pushStatus;
    }

    public String getPolicyKind() {
        return policyKind;
    }

    public void setPolicyKind(String policyKind) {
        this.policyKind = policyKind;
    }

    public BigDecimal getPrem() {
        return prem;
    }

    public void setPrem(BigDecimal prem) {
        this.prem = prem;
    }

    public BigDecimal getReducePrem() {
        return reducePrem;
    }

    public void setReducePrem(BigDecimal reducePrem) {
        this.reducePrem = reducePrem;
    }

    public BigDecimal getBeforePrem() {
        return beforePrem;
    }

    public void setBeforePrem(BigDecimal beforePrem) {
        this.beforePrem = beforePrem;
    }

    public BigDecimal getAfterPrem() {
        return afterPrem;
    }

    public void setAfterPrem(BigDecimal afterPrem) {
        this.afterPrem = afterPrem;
    }

    public BigDecimal getActualPrem() {
        return actualPrem;
    }

    public void setActualPrem(BigDecimal actualPrem) {
        this.actualPrem = actualPrem;
    }

    public String getProvinceName() {
        return provinceName;
    }

    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getCountyName() {
        return countyName;
    }

    public void setCountyName(String countyName) {
        this.countyName = countyName;
    }

    public String getPayType() {
        return payType;
    }

    public void setPayType(String payType) {
        this.payType = payType;
    }

    public String getApplicationType() {
        return applicationType;
    }

    public void setApplicationType(String applicationType) {
        this.applicationType = applicationType;
    }

    public String getCompensationRate() {
        return compensationRate;
    }

    public void setCompensationRate(String compensationRate) {
        this.compensationRate = compensationRate;
    }

    public String getPolicyNo() {
        return policyNo;
    }

    public void setPolicyNo(String policyNo) {
        this.policyNo = policyNo;
    }

    public String getPolicyStatus() {
        return policyStatus;
    }

    public void setPolicyStatus(String policyStatus) {
        this.policyStatus = policyStatus;
    }

    public List<PolicyAgentForProVO> getAgents() {
        return agents;
    }

    public void setAgents(List<PolicyAgentForProVO> agents) {
        this.agents = agents;
    }

    public HolderForProVO getHolder() {
        return holder;
    }

    public void setHolder(HolderForProVO holder) {
        this.holder = holder;
    }

    public List<InsuranceCompanyVO> getInsuranceCompanyVOS() {
        return insuranceCompanyVOS;
    }

    public void setInsuranceCompanyVOS(List<InsuranceCompanyVO> insuranceCompanyVOS) {
        this.insuranceCompanyVOS = insuranceCompanyVOS;
    }

    public List<InsuredForProVO> getInsuredList() {
        return insuredList;
    }

    public void setInsuredList(List<InsuredForProVO> insuredList) {
        this.insuredList = insuredList;
    }

    public List<RiskForProVO> getRiskList() {
        return riskList;
    }

    public void setRiskList(List<RiskForProVO> riskList) {
        this.riskList = riskList;
    }

    public String getFormulas() {
        return formulas;
    }

    public void setFormulas(String formulas) {
        this.formulas = formulas;
    }
}
